perm filename NTBOX.FAI[CMS,LCS] blob
sn#404769 filedate 1978-12-15 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00013 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE TBOX
C00004 00003 Reset and interrupt vectors.
C00006 00004 INPUT WAIT. Check upflg time?
C00008 00005 CALL CLED Clear cal. and mode leds.
C00010 00006 CKJSC: MOVRI K,JSC
C00012 00007 NOP ↔ NOP ↔ NOP For page boundry.
C00014 00008 WLED: OUTB Latch A on bus.
C00016 00009 WJLED: MOVAR N Save JS led bits.
C00017 00010 Bit spreading table
C00019 00011 GETJSW: MOVRI K,JW1
C00021 00012 Alfa led message table.
C00024 00013 ("T"∧77)∨300 ↔ ("O"∧77)∨200 ↔ ("O"∧77)∨100
C00027 ENDMK
C⊗;
TITLE TBOX
.INSERT MAC748.FAI[CMS,LCS]
;Ram bank 0 registers.
K ← 0
I ← 1
N ← 2
T ← 3 ;Timer overflow count.
CMD ← 4 ;TBOX and JS led bits.
CMD1 ← 5 ;Alfa led message index.
OFFL ← 6 ;Alfa off timer low.
OFFH ← 7 ;High.
;Ram10-27 = Stack.
;Ram bank 1 registers.
P ← 30 ;Pots pointer.
O ← 31 ;Offset pointer.
X ← 32
Y ← 33
Z ← 34
SW0 ← 35 ;TBOX switch bits.
SW1 ← 36
SW2 ← 37
;Standard ram.
SPD ← 40 ;Speed pot.
P0 ← 41 ;Joy stick pots.
P1 ← 42
P2 ← 43
P3 ← 44
JW0 ← 45 ;T. Joy stick switch channels.
JW1 ← 46 ;P/O.
JW2 ← 47 ;TOOL.
JW3 ← 50 ;T/JS/C.
OSPD ← 51 ;Old speed pot.
OP0 ← 52 ;Joy stick offsets.
OP1 ← 53
OP2 ← 54
OP3 ← 55
OJSW ← 56 ;Old joy stick switch bits.
OCMD ← 57 ;Old led bits.
OCMD1 ← 60 ;Old alfa led index.
JSC ← 61 ;Joy stick not calib. flag.
XTAL ← =6000000 ;In hertz.
BRATE ← =9600 ;Baud rate
;TBIT ← ((=10000000/BRATE)/((=10000000/XTAL)*=15))/2
TBIT ← =21
TT ← 1 ;Triple throw switch port.
S ← 2 ;Scan and A/D port.
PBL ← 4 ;Push button port low.
PBH ← 5 ;Push button port high.
CEW ← 6 ;Alfa led chip enables and write port.
JS ← 7 ;Joy stick, CU, and led latch port.
;Reset and interrupt vectors.
JMP RST ;RESET VECTOR
0
DISXI ;EXTERNAL INTERRUPT VECTOR
NOP
NOP
NOP
DISTI ;TIMER INT VECTOR
RETR
;Power on reset.
RST: CLRA ;0 For clear cursor memory.
OUTB ;Latch bus output.
MOVI 377 ;SETUP INPUT PORTS
OUTP TT ;SPTT switches.
MOVI 77 ;P4-7, SCAN, STRT, ALE.
OUTP S
;Setup PBSW ports for input.
MOVAX PBL ;PBSW low.
MOVAX PBH ;PBSW high.
;Clear cursor memory.
MOVI 170 ;7,,10.
MOVAX CEW ;Enable all alfa leds.
SWAP ;A ← 207.
MOVAX JS ;Clear JS and CU.
;Write all alfa leds.
ANPA CEW ;NOT W
CPLA
ORPA CEW ;W
SWAP ;A ← 10,,7.
ORPA CEW ;Disable all alfa leds.
SWAP ;A0-3 ← 10.
ORPA JS ;NOT CU.
CALL CLED ;Clear leds.
CALL CALED ;Clear alfa leds.
JINT CLRJSL ;Check if joy stick.
JMP STIMER
CLRJSL: MOVRI N,4 ;Joy stick not cal. bit.
CALL CJLED ;Init joy stick leds.
STIMER: MOVAT ;Setup timer.
STRTT
CPLF1 ;Set alfa leds off.
MOVRI K,JSC
MOVMI K,4 ;Set joy stick not calib.
JMP SETFLG
; Set scan flag and timer
UPFLG: DJNZ T,CKIN
SETFLG: MOVRI T,4 ;4 = 82 ms.
CLRF0 ;Set scan flag
JF1S CKIN ;Check if alfa off.
DJNZ OFFL,CKIN ;OFFW ← OFFW - 1.
DJNZ OFFH,CKIN
CPLF1 ;Set alfa led off flag.
;INPUT WAIT. Check upflg time?
OFFSET ← TBIT/3 ;Center delay?
INWAI: JTF UPFLG ;Check if timer time out.
CKIN: JT0H INWAI ;Check for start bit.
MOVRI K,OFFSET-4 ;Center - Itime.
CENTER: DJNZ K,CENTER ;Wait for center of bit
JT0H INWAI ;Check if valid start bit
; Byte input routine
MOVRI N,11 ;# of bits -1
ILOOP: MOVRI K,TBIT-5;tBIT - tI
WAI: DJNZ K,WAI
CLRC
JT0H BITON
RORC
JMP BITOFF
BITON: CPLC
RORC
NOP
BITOFF: DJNZ N,ILOOP
ROLC ;Shift out stop bit
JCC INWAI ;Check for good stop bit.
JBS 7,BYTE1 ;Check if first or second byte.
MOVAR CMD ;Save first input byte.
JMP INWAI ;Get next byte.
BYTE1: MOVAR CMD1 ;Save second byte.
CLRA ;SPD default.
JT1H ADZRO ;Speed off.
;A/DCHAN ← SPEED.
OUTB ;Latch zero on bus.
ORPI S,200 ;ALE.
ANPI S,177 ;NOT ALE.
CALL CONVRT ;Wait for speed.
JNZ ADZRO ;Check if on and zero.
INCA ;A ← 1.
ADZRO: MOVRI K,SPD ;Save speed pot value.
MOVAM K
CALL CLED ;Clear cal. and mode leds.
MOVRA CMD ;Get mode code.
RORC ;Get cal. bit.
ANI 7 ;Zero data input to LS259.
CALL WLED ;Write mode led.
JCC CKJOY ;No calib. bit.
CLRA ;Led 0.
CALL WLED ;Write cal. led.
CKJOY: JINT GPOTS ;Check for joy stick.
MOVRI K,JSC
MOVMI K,4 ;JSC ← 1.
JMP CKSCAN
GPOTS: MOVRA CMD ;Setup JS led bits.
SWAP ;Get JS led bits.
ANI 3 ;2 JS led bits.
MOVRI K,JSC
ORM K ;A ← A .OR. JSC.
CALL WJLED ;Write JS led bits.
;A/D convert routines.
MOVI 1 ;Chanel 1.
OUTB ;Latch bus output.
ORPI S,200 ;ALE
ANPI S,177 ;NOT ALE.
MOVI 375 ;NOT CLR bit.
ANPA JS ;NOT CLR.
CPLA
ORPA JS ;CLR.
MOVRI P,P0 ;JS pot index.
MOVRI N,10 ;# of pots + switch channels.
ADLOOP: CALL CONVRT ;Wait for A/D.
MOVAM P ;Ram(p) ← Pots&sws(p).
MOVI 376
ANPA JS ;NOT CNT.
CPLA
ORPA JS ;CNT
INCR P ;Next pot.
DJNZ N,ADLOOP ;Next channel.
;Check for scan flag.
CKSCAN: JF0S CKJSC ;Scan flag.
JMP SCAN ;Scan switches.
CKJSC: MOVRI K,JSC
MOVMA K ;A ← JSC.
JBS 2,ZPOTS ;Check if JS not calib.
MOVRI P,P0 ;Pots pointer.
MOVRI O,OP0 ;Offset pointer.
MOVRI N,4 ;# of pots.
OFFSL: MOVMA P ;Get pot.
CPLA
ADDM O ;Subtract offset.
CPLA
MOVAM P ;Save pot.
INCR P
INCR O
DJNZ N,OFFSL
JMP CKACT
ZPOTS: CLRA
MOVRI P,P0
MOVRI N,4 ;# of pots.
ZPL: MOVAM P ;Ram(Pots) ← 0.
INCR P
DJNZ N,ZPL
;Activity check.
CKACT: MOVRI K,OCMD
MOVMA K
XORR CMD ;A ← CMD .XOR. OCMD.
JNZ ACT
MOVRI K,OCMD1 ;Old alfa index.
MOVMA K
XORR CMD1
JNZ ACT
SRB1 ;Select ram bank 1.
MOVRA SW0
JNZ RACT
MOVRA SW1
JNZ RACT
MOVRA SW2
ANI 77 ;Mask out JS and P/O bits.
JNZ RACT
MOVRI P,SPD ;Now pot index.
MOVRI O,OSPD ;Old pot index.
MOVMA P ;Check speed.
XORM O
JZ CKJP
RACT: SRB0 ;Select ram bank 0.
ACT: JMP ACTIVE
NOP ↔ NOP ↔ NOP ;For page boundry.
CKJP: MOVRI N,4
JSZCK: INCR P
MOVMA P
JNZ RACT ;Check if JS pots are zero.
DJNZ N,JSZCK
SRB0 ;Select ram bank 0.
CLRA ;Blank message index.
JF1S ADPY ;Check if alfa off.
JMP OBITS ;Not active.
RSTRAM: SRB0 ;Select ram bank 0.
ACTIVE: MOVRA CMD ;OLD ← NEW.
MOVRI K,OCMD
MOVAM K ;OCMD.
MOVRA CMD1
INCR K
MOVAM K ;OCMD1.
MOVRI P,SPD
MOVRI O,OSPD
MOVMA P ;A ← SPD.
MOVAM O ;OSPD ← A.
CLRF1 ;Alfa led off flag ← 0.
MOVRI OFFH,10 ;OFFW ← tOWAIT.
MOVRA CMD1 ;Update alfa leds.
SWAP ;Shift etc.
ANI 360 ;For 16 messages.
ADPY: CALL OALFA ;Output message.
OBITS: MOVRI CMD1,0 ;Init check sum.
MOVRI I,SW0 ;Point to out bytes.
MOVRI CMD,10 ;# of output bytes.
OUTL: MOVMA I ;Get output byte.
CALL OBYTE
ADR CMD1 ;Add it to cksum.
MOVAR CMD1
INCR I
DJNZ CMD,OUTL
MOVRA CMD1
CPLA
INCA
CALL OBYTE ;Output check sum.
JMP INWAI ;Loop back to input wait.
; Output Acc. to SI/O line
OBYTE: MOVRI K,11 ;# of bits -1
CLRC
ROLC ;Start bit
OLOOP: OUTP TT ;Output bit
RORC
MOVRI N,TBIT-3 ;TBIT - Itime.
OWAIT: DJNZ N,OWAIT
DJNZ K,OLOOP
ORPI TT,377 ;Stop bit.
MOVRI N,TBIT-10 ;TBIT - Itime.
SWAIT: DJNZ N,SWAIT
RORC
RET
WLED: OUTB ;Latch A on bus.
MOVI 7 ;NOT led E bit.
ANPA JS ;NOT E.
CPLA
ORPA JS ;E.
RET
;Clear leds
CLED: MOVRI N,370
MOVRA N ;Setup regs.
CLRL: CALL WLED ;Clear led loop.
INCR N ;Next led.
MOVRA N
JNZ CLRL
RET
;Convert channel and wait.
CONVRT: ORPI S,100 ;STRT.
ANPI S,277 ;NOT STRT.
MOVI =22 ;=172 micro seconds?
CONL: DECA ;Convert wait.
JNZ CONL
MOVXMA K ;Get A/D output.
MOVXMA K ;Twice for bus unlatch.
OUTB ;Latch bus for output.
RET
;Alfa led output routines.
CALED: CLRA ;Blank string index.
OALFA: MOVAR I ;Save string index.
MOVI 376 ;NOT CE0.
CENBL: MOVRI N,4 ;# of chrs in I.C.
MOVAR K ;Save CE.
MOVAX CEW ;NOT CE.
CHRL: MOVRA I
MOVP3 ;A ← String(chr).
OUTB ;Latch bus output.
MOVI 367
ANPA CEW ;NOT W.
CPLA
ORPA CEW ;W
INCR I ;CHR ← CHR+1.
DJNZ N,CHRL
MOVRA K
ROL ;Next CE.
JBS 3,CENBL
ORPA CEW ;CE.
RET
WJLED: MOVAR N ;Save JS led bits.
CJLED: MOVI 355 ;NOT CNT,,CLR.
ANPA JS ;NOT CLR.
CPLA
ORPA JS ;CLR.
SWAP ;A ← 2,,1.
INCR N ;Fix for latch.
JMP CKZRO
CJL: CPLA ;A ← 15,,16.
ANPA JS ;NOT CNT.
CPLA
ORPA JS ;CNT
CKZRO: DJNZ N,CJL
MOVI 373
ANPA JS ;NOT LAT.
CPLA
ORPA JS ;LAT.
RET
; Bit spreading table
LOC 1000 ;1000 = Start of page two.
125 ↔ 124 ↔ 121 ↔ 120 ↔ 105 ↔ 104 ↔ 101 ↔ 100
25 ↔ 24 ↔ 21 ↔ 20 ↔ 5 ↔ 4 ↔ 1 ↔ 0
SBITS ← 60 ;Scan bits.
ROW0 ← 357 ;Scan row 0.
ROW1 ← 337 ;Scan row 1.
SCAN: SRB1 ;Select ram bank 1.
CPLF0 ;Reset scan flag.
ORPI S,SBITS ;Turn off rows
ANPI S,ROW0 ;Enable row 0.
INP TT ;Scan row 0
MOVAR SW0 ;Save it
ANI 17 ;Get low nibble
MOVPD ;Get bits from spread table
XCHR SW0
SWAP ;Swap high low nibbles
ANI 17 ;Get high nibble
MOVPD
MOVAR SW1
ORPI S,SBITS ;Turn off row 0.
ANPI S,ROW1 ;Enable row 1.
INP TT ;Scan row 1
ORPI S,SBITS ;Disable scan.
MOVAR SW2 ;Save row 1
ANI 17 ;Low nibble
MOVPD
ROL ;Shift + bits
ORR SW0 ;Or into - bits
ANI 374 ;Clear teach and off bits.
MOVAR SW0
MOVRA SW2 ;Get row 1 again
SWAP
ANI 17
MOVPD
ROL
ORR SW1
MOVAR SW1
MOVXA PBL ;Get push buttons.
MOVAR SW2 ;Save low nibble.
MOVXA PBH
SWAP ;High nibble.
ORR SW2
CPLA
MOVAR SW2
ANI 77 ;Zero JS and P/O bits.
XCHR SW2
ROLC ;Shift & swap teach & off bits
ROL
ROLC
ANI 3
ORR SW0
MOVAR SW0
JINT GETJSW ;Check if joy stick.
SRB0 ;Select ram bank 0.
JMP ZPOTS ;No joy stick.
GETJSW: MOVRI K,JW1
MOVMA K ;A ← P/O.
ANI 100 ;Get P/O bit.
ORR SW2
MOVAR SW2 ;SW2 ← P/O .OR. PBSWs.
MOVRI K,JW3
MOVMA K ;Joy stick T/JS/C bits.
ANI 300
JZ SETOFF ;Calib. joy stick.
JBS 6,SETJT
MOVI 100
SETJT: XORI 300 ;Complement J/T bit.
ORR SW2 ;OR into SW2.
MOVAR SW2
JBS 7,GTOOL ;Check for JS mode.
SRB0 ;Select ram bank 0.
JMP CKJSC
GTOOL: MOVRI K,JW0 ;Check JS switch bits.
MOVMA K ;Get JS teach switch.
ROLC
MOVRA SW0
ROR
ROLC ;Shift teach bit into SW0.
MOVAR SW0
MOVRI K,JW2
MOVMA K ;Get JS tool bits.
ANI 300
JNZ TPLUS ;Check for T-.
MOVI 100 ;T- bit.
STOOL: XCHR SW1
ANI 77 ;Zero TBOX tool bits.
ORR SW1 ;SW1 ← SW1 .OR. JSTOOLBITS.
MOVAR SW1
SRB0 ;Select ram bank 0.
JMP CKJSC
TPLUS: JBS 6,SETTP ;Check for no tool bits.
CLRA
SETTP: ANI 200
JMP STOOL ;OR Tbits into SW1.
SETOFF: MOVRI P,P0 ;Pots pointer.
MOVRI O,OP0 ;Offset pointer.
MOVRI N,4 ;# of pots.
SETL: MOVMA P ;A ← POT(P).
MOVAM O ;OFFSET(O) ← A.
INCR P
INCR O
DJNZ N,SETL
MOVRI K,JSC
MOVMI K,0 ;JSC ← 0.
MOVI 200
ORR SW2 ;Set JS/T bit.
MOVAR SW2
JMP GTOOL
;Alfa led message table.
LOC 1400 ;Start of page three.
(" "∧77)∨300 ↔ (" "∧77)∨200 ↔ (" "∧77)∨100
" "∧77 ↔ (" "∧77)∨300 ↔ (" "∧77)∨200
(" "∧77)∨100 ↔ " "∧77 ↔ (" "∧77)∨300
(" "∧77)∨200 ↔ (" "∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
("L"∧77)∨300 ↔ ("I"∧77)∨200 ↔ ("M"∧77)∨100
"I"∧77 ↔ ("T"∧77)∨300 ↔ (" "∧77)∨200
("S"∧77)∨100 ↔ "T"∧77 ↔ ("O"∧77)∨300
("P"∧77)∨200 ↔ (" "∧77)∨100 ↔ "1"∧77
0 ↔ 0 ↔ 0 ↔ 0
("L"∧77)∨300 ↔ ("I"∧77)∨200 ↔ ("M"∧77)∨100
"I"∧77 ↔ ("T"∧77)∨300 ↔ (" "∧77)∨200
("S"∧77)∨100 ↔ "T"∧77 ↔ ("O"∧77)∨300
("P"∧77)∨200 ↔ (" "∧77)∨100 ↔ "2"∧77
0 ↔ 0 ↔ 0 ↔ 0
("L"∧77)∨300 ↔ ("I"∧77)∨200 ↔ ("M"∧77)∨100
"I"∧77 ↔ ("T"∧77)∨300 ↔ (" "∧77)∨200
("S"∧77)∨100 ↔ "T"∧77 ↔ ("O"∧77)∨300
("P"∧77)∨200 ↔ (" "∧77)∨100 ↔ "3"∧77
0 ↔ 0 ↔ 0 ↔ 0
("L"∧77)∨300 ↔ ("I"∧77)∨200 ↔ ("M"∧77)∨100
"I"∧77 ↔ ("T"∧77)∨300 ↔ (" "∧77)∨200
("S"∧77)∨100 ↔ "T"∧77 ↔ ("O"∧77)∨300
("P"∧77)∨200 ↔ (" "∧77)∨100 ↔ "4"∧77
0 ↔ 0 ↔ 0 ↔ 0
("L"∧77)∨300 ↔ ("I"∧77)∨200 ↔ ("M"∧77)∨100
"I"∧77 ↔ ("T"∧77)∨300 ↔ (" "∧77)∨200
("S"∧77)∨100 ↔ "T"∧77 ↔ ("O"∧77)∨300
("P"∧77)∨200 ↔ (" "∧77)∨100 ↔ "5"∧77
0 ↔ 0 ↔ 0 ↔ 0
("L"∧77)∨300 ↔ ("I"∧77)∨200 ↔ ("M"∧77)∨100
"I"∧77 ↔ ("T"∧77)∨300 ↔ (" "∧77)∨200
("S"∧77)∨100 ↔ "T"∧77 ↔ ("O"∧77)∨300
("P"∧77)∨200 ↔ (" "∧77)∨100 ↔ "6"∧77
0 ↔ 0 ↔ 0 ↔ 0
("L"∧77)∨300 ↔ ("I"∧77)∨200 ↔ ("M"∧77)∨100
"I"∧77 ↔ ("T"∧77)∨300 ↔ (" "∧77)∨200
("S"∧77)∨100 ↔ "T"∧77 ↔ ("O"∧77)∨300
("P"∧77)∨200 ↔ (" "∧77)∨100 ↔ "7"∧77
0 ↔ 0 ↔ 0 ↔ 0
("T"∧77)∨300 ↔ ("O"∧77)∨200 ↔ ("O"∧77)∨100
" "∧77 ↔ ("C"∧77)∨300 ↔ ("L"∧77)∨200
("O"∧77)∨100 ↔ "S"∧77 ↔ ("E"∧77)∨300
(" "∧77)∨200 ↔ (" "∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
("T"∧77)∨300 ↔ ("O"∧77)∨200 ↔ ("O"∧77)∨100
" "∧77 ↔ ("F"∧77)∨300 ↔ ("A"∧77)∨200
("R"∧77)∨100 ↔ " "∧77 ↔ (" "∧77)∨300
(" "∧77)∨200 ↔ (" "∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
("T"∧77)∨300 ↔ ("E"∧77)∨200 ↔ ("A"∧77)∨100
"C"∧77 ↔ ("H"∧77)∨300 ↔ (" "∧77)∨200
("M"∧77)∨100 ↔ "O"∧77 ↔ ("D"∧77)∨300
("E"∧77)∨200 ↔ (" "∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
("M"∧77)∨300 ↔ ("A"∧77)∨200 ↔ ("N"∧77)∨100
"U"∧77 ↔ ("A"∧77)∨300 ↔ ("L"∧77)∨200
(" "∧77)∨100 ↔ "M"∧77 ↔ ("O"∧77)∨300
("D"∧77)∨200 ↔ ("E"∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
("N"∧77)∨300 ↔ ("O"∧77)∨200 ↔ (" "∧77)∨100
"H"∧77 ↔ ("I"∧77)∨300 ↔ ("G"∧77)∨200
("H"∧77)∨100 ↔ " "∧77 ↔ ("P"∧77)∨300
("W"∧77)∨200 ↔ ("R"∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
("P"∧77)∨300 ↔ ("R"∧77)∨200 ↔ ("O"∧77)∨100
"G"∧77 ↔ (" "∧77)∨300 ↔ ("R"∧77)∨200
("U"∧77)∨100 ↔ "N"∧77 ↔ ("N"∧77)∨300
("I"∧77)∨200 ↔ ("N"∧77)∨100 ↔ "G"∧77
0 ↔ 0 ↔ 0 ↔ 0
("R"∧77)∨300 ↔ ("U"∧77)∨200 ↔ ("N"∧77)∨100
" "∧77 ↔ ("H"∧77)∨300 ↔ ("O"∧77)∨200
("L"∧77)∨100 ↔ "D"∧77 ↔ (" "∧77)∨300
(" "∧77)∨200 ↔ (" "∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
("F"∧77)∨300 ↔ ("A"∧77)∨200 ↔ ("T"∧77)∨100
"A"∧77 ↔ ("L"∧77)∨300 ↔ (" "∧77)∨200
("E"∧77)∨100 ↔ "R"∧77 ↔ ("R"∧77)∨300
("O"∧77)∨200 ↔ ("R"∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
LOC 2272
0 ;This is for a block of zeros
END